import Queue from "./queue";

// 队列队列运用：击鼓传花
// 游戏规则：在这个游戏中，孩子们围成一个圆圈，把花尽快地传递给旁边的人。某一时刻传花停止，这个时候花在谁手里，谁就退出圆圈、结束游戏。重复这个过程，直到只剩一个孩子（胜者）

const passFlowerGame = (members, boomNum) => {
  const queue = new Queue();
  const outMembers = [];

  // 1. 成员依次入队
  for (const item of members) {
    queue.enqueue(item);
  }
  // 2. 传花
  // 2.1 当游戏只剩1人时，游戏才结束
  while (queue.size() > 1) {
    for (let i = 0; i < boomNum; i++) {
      // 2.2 当没到达boomNum时，在传花过程中前面的人依次出队，并再入队，以实现循环传花
      queue.enqueue(queue.dequeue());
    }
    // 2.3 当到达boomNum时，此时在队首的人即为淘汰的人
    outMembers.push(queue.dequeue());
  }

  return {
    outMembers,
    winner: queue.front(),
  };
};

export default passFlowerGame;
